//
// Created by china on 25-1-17.
//

#ifndef CHAT_REDIS_H
#define CHAT_REDIS_H

#include <hiredis/hiredis.h>
#include <functional>
#include <string>
#include <thread>
#include <muduo/base/Logging.h>

class Redis {
public:
    Redis();
    ~Redis();

    //连接redis服务器
    bool connect();
    //向redis指定的通道channel发布消息
    bool publish(int channel,std::string message);
    //向redis指定的通道subscribe订阅消息
    bool subscribe(int channel);
    //向redis指定的通道取消订阅消息
    bool unsubscibe(int channel);
    //在独立的线程中接收订阅通信通道中的消息
    void observerChannalMessage();
    //初始化向业务层上报通道消息的回调函数对象
    void initNotifyHandler(std::function<void(int,std::string)> fn);

private:
    //负责publish
    redisContext* _publishContext;
    //负责subcribe
    redisContext* _subcribeContext;
    //回调操作，收到订阅消息，给service层上报
    std::function<void(int,std::string)> _notifyMessageHandler;
};


#endif //CHAT_REDIS_H
